<?php
class LoginzaModel extends CModel
{
    public $identity;
    public $provider;
    public $email;
    public $last_name;
    public $first_name;
    public $token;
    public $error_type;
    public $error_message;
 
    private $loginzaAuthUrl = 'http://loginza.ru/api/authinfo?token=';
 
    public function rules() 
    {
        return array(
            array('identity,provider,token', 'required'),
            array('email', 'email'),
            array('identity,provider,email,last_name,first_name', 'length', 'max'=>255)
        );
    }
 
    public function attributeLabels() 
    {
        return array(
            'identity' => 'Идентификатор сервиса аутентификации',
            'provider' => 'Сервис аутентификации',
            'email' => 'Email',
            'first_name' => 'Имя',
            'last_name' => 'Фамилия',
        );
    }
 
    /**
     * Получение данных от сервиса Loginza.
     * Предварительно нужно установить $this->token
     * Например, так
     * $loginza = new LoginzaModel();
     * $loginza->setAttributes($_POST);
     */
    public function getAuthData() 
    {
        //получаем данные от сервера Loginza
        $authData = json_decode(file_get_contents($this->loginzaAuthUrl.$this->token), true);
        $this->setAttributes($authData);

        $this->last_name = $authData['name']['last_name'];
        $this->first_name = $authData['name']['first_name'];
    }
 
    /**
     * Аутентификация посетителя.
     * @return boolean true - если посетитель аутентифицирован, false - в противном случае.
     */
    public function login() 
    {
        $identity = new LoginzaUserIdentity();
        
        if ($identity->authenticate($this))
        {
            $duration = 3600*24*30; // 30 days
            Yii::app()->user->login($identity, $duration);
            return true;
        }
        return false;
    }
 
    public function attributeNames()
    {
        return array(
            'identity'
            ,'provider'
            ,'email'
            ,'full_name'
            ,'token'
            ,'error_type'
            ,'error_message'
        );
    }
}